#ifndef _cesium_stage_hpp_
#define _cesium_stage_hpp_

#include "cesium/refcounted.hpp"
#include "cesium/buffer.hpp"
#include "cesium/stage.hpp"

namespace Cesium {

/** Stage in a pipeline.  Stages are reference counted operators which
 *  have sets of source and sink stages, provides format information for them,
 *  can accept signals from previous (source) stages, and perform its
 *  operation and invoke subsequent (sink) stages as data is produced.
 */
class Stage : public RefCounted<Stage> {
public:
    Stage();
    virtual ~Stage();

    void signal(Stage* src, Buffer* data);
    virtual void signal(Stage* src, Buffer* data, BufferRange range) = 0;
}; // class Stage

} // namespace Cesium

#endif //_cesium_stage_hpp_
